查看原文
其他

Lending Club 实战--利用Python创建申请评分卡

2017-12-06 zhaikun Python爱好者社区

作者:zhaikun   风控建模屌丝一枚,现居于北京

个人微信公众号:Python数据分析与评分卡建模

联系方式:664086823@qq.com


Lending Club,P2P平台,公司位于美国旧金山。2014年12月12日开始在纽交所挂牌交易,代码LC。目前总市值54亿美元。


所用数据是 LoanStats_2016Q4.csv 和LoanStats_2017Q1.csv ,在 LoanStats_2016Q4.csv 上训练模型和验证模型,在LoanStats_2017Q1.csv上加载模型用来测试模型表现。


所用模型是LogisticRegression 和 XGBClassifier,默认参数未调参


数据来源:https://www.lendingclub.com/info/download-data.action

特征变量解释:http://www.docin.com/p-635342290.html

目标变量解释:http://www.doc88.com/p-5089631302589.html


# Step 1: 数据加载

import pandas as pd import numpy as np import os os.chdir('d:/work/LendingClub') data=pd.read_csv('LoanStats_2016Q4.csv',skiprows=1)

data.head()


我们发现共103548个样本,145个特征。

缺失值可视化发现,很多特征含有缺失值。

# Step 2: 数据预处理与特征过滤



预处理:删除缺失比例0.5以上的变量、常数变量、检查有没有重复变量


再继续看看下数据集形状,发现特征从145变成了102

data.shape(103548, 102)


数据集中很多特征是关于投资人的数据,与建模无关,所以我需要过滤变量;同时为了便于大家理解,我把特征重命名为中文。


再次预览数据,此时剩余26个特征




# Step 3: 特征抽象与可视化


我先把变量分为连续变量与分类变量,发现有11个连续变量,15个分类变量


接下来可视化作图



发现目标变量有点乱,没关系。

特征抽象:把目标变量各水平转为我们所需要的0、1形式。

处理后发现正常客户17731,违约客户6816



特征中有时间变量:信用报告最早日期、放款日期。


我们知道美国的征信数据是比较完善的,那我想知道会不会开启“信用报告天赋”越早,表现越好呢?

这里稍微做了个特征衍生,创建了新变量days,含义是放款时,客户拥有信用报告的天数




在做过分类变量水平合并和删除严重不平衡的分类变量后,接下来就是可视化了:让我们看一下各变量的分布以及与目标变量的关系吧



有一句话叫:老板看不懂代码,但能看得懂图。get可视化技能很重要哦!


对于以上图片相信大家都能看懂,我就不赘述了,接下来再次预览数据,还剩下22个特征



# Step 4: 数据补缺


我们先看一下处理后的数据缺失情况吧


在这里,我把连续变量用随机抽样补缺,分类变量用众数补缺,同时统一字符变量为大写




# Step 5: 卡方分箱,计算WOE和IV值


为了创建申请评分卡,我们不用One-hot、不用归一化,而是选择卡方分箱和WOE编码。

这里先解释下卡方分箱、WOE和IV的概念:






卡方分箱和WOE计算过程较为繁琐,这里不再赘述。最终保存如下数据:



虽然分箱前只有22个特征,但还是要筛选变量的,经过IV筛选和相关系数筛选后,剩余9个变量




2016Q4数据中,逾期坏样本比例28%,我们可以不用"过抽样"。本着探讨的精神, 我会用逻辑回归,XGBOOST 这2个模型,未SMOT抽样,SMOTE抽样这2种情况,共训练4个模型;


之后这4个模型会在在2017Q1数据中分别加载,看看效果。


先看smote抽样方法:



逻辑回归有个显著性检验,这一步也可以筛选变量:



这几个变量都是显著的,下面建模


第一个模型是经过smote抽样后的逻辑回归模型:




我们发现统计指标不是很好,别灰心,惊喜在下面!

再看看经过smote抽样的xgboost模型:




是不是很激动,统计指标辣么高!

再看更鸡冻的:红线代表逾期客户的分数分布,蓝线代表正常客户的分数分布。


我们发现:哇塞,低分与高分分的好开,直接拒绝低分的,放过高分的,人工审核中间分的,太棒了!




但是,它过拟合了。接下来告诉你什么


我们再看看未经过smote抽样的数据,分别用逻辑回归和xgboost试试。

先看LR:





我们会发现,未经过smote抽样的逻辑回归准确率大幅提升,KS和AUC变化不明显。


再看XGBOOST:







统计指标大幅下降!  但是比逻辑回归略好


这4个模型训练好了,我们看下这4个模型在2017年第1季度数据上的表现


先加载未经过smote采样的逻辑回归模型




可见:虽然说是不同的数据,但逻辑回归表现的还是比较稳定的


再加载经过smote采样的逻辑回归模型




我们发现smote采样后的模型,测试准确率低了很多。


前辈经验是10%坏样本以上的数据尽量先不用smote采样哦


同样的方法加载XGBOOST模型,这里就不赘述了。


最后把汇总的统计指标发给大家,怎么分析,仁者见仁智者见智啦。


X轴:0表示未smote抽样,load表示加载模型

Y轴:统计指标实际值

本文数据获取:下图扫码关注Python爱好者社区后回复 LC

Python爱好者社区历史文章大合集

Python爱好者社区历史文章列表(每周append更新一次)

福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

关注后在公众号内回复“课程”即可获取:

0.小编的Python入门视频课程!!!

1.崔老师爬虫实战案例免费学习视频。

2.丘老师数据科学入门指导免费学习视频。

3.陈老师数据分析报告制作免费学习视频。

4.玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。

5.丘老师Python网络爬虫实战免费学习视频。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存